package com.gftBrazil.BankSystem.tableModel;

import com.gftBrazil.BankSystem.bean.ClienteBean;
import com.gftBrazil.BankSystem.bean.enums.EstadoCliente;
import com.gftBrazil.BankSystem.bean.enums.UnidadeFederativa;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author JRSS
 */
public class ClienteTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;
    private final List<ClienteBean> clientes;

    public ClienteTableModel() {
        clientes = new ArrayList<>();
    }

    public ClienteTableModel(List<ClienteBean> lista) {
        this();
        clientes.addAll(lista);
    }

    @Override
    public Class<?> getColumnClass(int coluna) {
        return String.class;
    }

    @Override
    public int getRowCount() {
        return clientes.size();
    }

    @Override
    public int getColumnCount() {
        return 5;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        ClienteBean c = clientes.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return c.getCodigoCliente();
            case 1:
                return c.getNome();
            case 2:
                return c.getCidade();
            case 3:
                return c.getUnidadeFederativa();
            case 4:
                return c.getEstadoCliente();
            default:
                return "";
        }
    }

    @Override
    public String getColumnName(int coluna) {

        switch (coluna) {
            case 0:
                return "Codigo";
            case 1:
                return "Nome";
            case 2:
                return "Cidade";
            case 3:
                return "UE";
            case 4:
                return "Estado";
            default:
                return "";
        }
    }

    @Override
    public void setValueAt(Object value, int rowIndex, int columnIndex) {
        ClienteBean c = clientes.get(rowIndex);

        switch (columnIndex) {
            case 0:
                break;
            case 1:
                c.setNome(value.toString());
                break;
            case 2:
                c.setCidade(value.toString());
                break;
            case 3:
                c.setUnidadeFederativa(UnidadeFederativa.valueOf(value.toString()));
                break;
            case 4:
                c.setEstadoCliente(EstadoCliente.valueOf(value.toString()));
                break;
        }
    }

    public void adiciona(ClienteBean c) {
        clientes.add(c);
        fireTableRowsInserted(clientes.size() - 1, clientes.size() - 1);
    }

    public void remove(int indice) {
        clientes.remove(indice);
        fireTableRowsDeleted(indice, indice);
    }

    public int getIndice(ClienteBean c) {
        return clientes.indexOf(c);
    }

    public void adicionaLista(List<ClienteBean> lista) {
        int i = clientes.size();
        clientes.addAll(lista);
        fireTableRowsInserted(i, i + lista.size());
    }

    public void limpaLista() {
        int i = clientes.size();
        clientes.clear();
        fireTableRowsDeleted(0, i - 1);
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }

}
